ICカードリードしたかった By (Mac, RC-S300)
結論
どう足掻いてもできないです
RC-S330を買おう(まだ試していない)
経緯
私の研究室(研究棟E115 山田研究室)はBlynk経由でLチカさせてメンバーが研究室に不在かどうか管理している(電子光プロジェクトで同期達が作成した)
https://scrapbox.io/files/64aab7f9f2280b001c3bd297.png
しかし、BlynkのネイティブアプリからLチカ命令を出すのは面倒。(大体はスマホで、アプリ起動して命令を出している)
目的
ICカードリーダーに学生証をかざして、Lチカさせたい
併せて、UX向上のため音声を流したい(例:ずんだもんが「こんにちはなのだ、今日もがんばろうなのだ」って喋る)
https://scrapbox.io/files/64aabafc465898001c69f001.png
ICカードリーダーの技術
NFCという技術が使われています。
https://scrapbox.io/files/64aaacde465898001c695031.png
引用: https://www.sony.co.jp/Products/felica/NFC/
日本では、NFCより高機能なFeliCaが使われている(Sonyが発明)
CISTの学生証もおそらくFeliCaです。
方法
ICカードリーダーのリード情報を取得するには
1. nfcpyを使う(デファクトスタンダードらしい)
2. nfc/nfc.hを使う
3. SonyのFeliCaのSDKを使う
結果
要因として、MacとRC-S300があるので、RC-S300 x Windowsだとうまくいく可能性は十分あります。
DockerDesktop for MacはdeviceオプションでUSBの設定ができないのも要因としてあります。使えたら、多分いけるかも
1. nfcpyを使う
「RC-S300は使えないぞ!」、「RC-S300は使えないぞ!」と各所で書かれているように使えないです。
デバイス認識しないです
2. nfc/nfc.hを使う
libnfcをインストールすると**/include/にnfcが追加されます。
macのbrewで管理している場合、/usr/local/include/**(シンボリックリンク)
nfcpyがusblibのラッパーライブラリかどうか知りたい
code: main.c
#include <stdio.h>
#include <stdlib.h>
#include <nfc/nfc.h>
int main()
{
nfc_context *context;
nfc_device *device;
// NFCコンテキストの初期化
nfc_init(&context);
if (context == NULL)
{
fprintf(stderr, "Error initializing NFC context.\n");
return 1;
}
// 最初に見つかったNFCデバイスの取得
device = nfc_open(context, NULL);
if (device == NULL)
{
fprintf(stderr, "Error opening NFC device.\n");
nfc_exit(context);
return 1;
}
// NFCデバイスの初期化
if (nfc_initiator_init(device) < 0)
{
fprintf(stderr, "Error initializing NFC device.\n");
nfc_close(device);
nfc_exit(context);
return 1;
}
printf("Listening for NFC tags. Press Ctrl+C to exit.\n");
// NFCデバイスからデータを受信
while (1)
{
nfc_target target;
if (nfc_initiator_poll_target(device, NULL, 0, 0, 0, &target) > 0)
{
printf("NFC tag found.\n");
}
}
// リソースの解放
nfc_close(device);
nfc_exit(context);
return 0;
}
code:terminal
$ gcc main.c -I/usr/local/include/nfc -L/usr/local/lib -lnfc
コンパイルは通りますが、エラーが出ます。残念!
3. SonyのFeliCaのSDKを使う
法人向けなので論外です。ダウンロード時にも法人情報求められます。
最後に
FeliCaはNFCのインターフェースに則っているので、nfcpyでデータ取得できるわけですが、RC-S300もサポートしていたら嬉しかったです。
NFCアプリ開発でMacは向いてないです。無難なのはWindowsです。
また無難にnfcpyに対応しているRC-S330, RC-S380を買いましょう(S300に比べて2000円位高いけどね)
後日、Windowsでも抗ってみます